Секундомер.отд
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы
 
 glagol.png Программируем по-русски
 

Основная задача Глагола — дать человеку возможность воплощать свои мысли на языке, близком к его родному языку.

Издатель Глагола
 

 

(******************************************************************************)
(**)                        ОТДЕЛ Секундомер+;
(******************************************************************************
 * НАЗНАЧЕНИЕ: пример использования наделов и времени
 ******************************************************************************)
ИСПОЛЬЗУЕТ
  ОС       ИЗ "...\Отделы\Обмен\", (* для считывания времени *)
  Окно     ИЗ "...\Отделы\Обмен\",
  Ввод     ИЗ "...\Отделы\Обмен\",
  Поле     ИЗ "...\Отделы\Поле\",
  Подложка ИЗ "...\Отделы\Поле\",
  Записка  ИЗ "...\Отделы\Поле\",
  Кнопка   ИЗ "...\Отделы\Поле\",
  Черта    ИЗ "...\Отделы\Поле\";

ПОСТ     (* действия кнопок *)
  дПуск =1;
  дСтоп =2;
  дСброс=3;
  дВыход=4;

ПЕР
  идётИзмерение:КЛЮЧ;    (* ВКЛ, если идёт измерение времени  *)
  измеренноеВремя:ЦЕЛ;   (* промежуток времени в мс           *)
  моментОбновления:ЦЕЛ;  (* показаний                         *)
  зВремя:Записка.Доступ; (* записка с показаниями секундомера *)

(******************************************************************************)
ЗАДАЧА ОбновитьПоказания(номерЧасов:ЦЕЛ);
(* обновить показания секундомера *)
ПЕР
  сотые,секунды,минуты,часы:ЦЕЛ;
  сейчас:ЦЕЛ;
  прошлоВремени:ЦЕЛ;
УКАЗ
  сейчас:=ОС.Время();
  прошлоВремени:=сейчас-моментОбновления;
  моментОбновления:=сейчас;
  ЕСЛИ идётИзмерение ТО
    УВЕЛИЧИТЬ(измеренноеВремя,прошлоВремени)
  КОН;
  сотые:=измеренноеВремя ДЕЛИТЬ 10;
  секунды:=сотые ДЕЛИТЬ 100;
  минуты:=секунды ДЕЛИТЬ 60;
  часы:=минуты ДЕЛИТЬ 60;
  Записка.ИзЧЦел(
  зВремя,"%.2d:%.2d:%.2d.%.2d",
    часы,минуты ОСТАТОК 60,
        секунды ОСТАТОК 60,
          сотые ОСТАТОК 100
                )
КОН ОбновитьПоказания;

(******************************************************************************)
ЗАДАЧА Приём(поле:Поле.Доступ; посылка+:Ввод.Посылка);
(* получить и обработать управляющие послания *)
УКАЗ
  ДЛЯ посылка ВИДА
  | Кнопка.Посылка:
      ВЫБРАТЬ посылка.кнопка.действие ИЗ
      | дПуск:  идётИзмерение:=ВКЛ
      | дСтоп:  идётИзмерение:=ОТКЛ
      | дСброс: измеренноеВремя:=0
      | дВыход: поле.состояние:=Поле.сДалее
      КОН
  | Ввод.ОтКлавиш:
      ЕСЛИ посылка.упрАльт И (посылка.код=58H) (* Alt+'X' *)
         ИЛИ
          (посылка.код=1BH)                    (* Esc     *)
      ТО
        поле.состояние:=Поле.сДалее
      КОН
  ИНАЧЕ
  КОН
КОН Приём;

(******************************************************************************)
ЗАДАЧА Главная;
ПЕР
  поле:Поле.Доступ;                            (* рабочее поле экрана   *)
  подложка:Подложка.Доступ;                    (* подложка поля         *)
  кнСтоп,кнПуск,кнСброс,кнВыход:Кнопка.Доступ; (* управляющие кнопки    *)
  черта1,черта2:Черта.Доступ;                  (* разделительные черты  *)
  часы:ЦЕЛ;

  (****************************************************************************)
  ЗАДАЧА СоздатьПоле;    (* создаёт рабочее поле экрана с кнопками-наделами *)
  УКАЗ                                           (* создаём поле экрана *) 
                                 (* задача Приём *)
    поле:=Поле.Создать(0,0,8,17,ПУСТО,ОТКЛ,Приём);
                                                     (* создаём наделы *)
    подложка:=Подложка.Создать(0,0,0,0,"");
    зВремя:=Записка.Создать(1,3,1,11,"00:00:00.00");
    черта1:=Черта.Создать(2,0,1,0);
    кнПуск:=Кнопка.Создать(3,2,"[~Пуск]",дПуск,ВКЛ);
    кнСтоп:=Кнопка.Создать(3,9,"[~Стоп]",дСтоп,ВКЛ);
    кнСброс:=Кнопка.Создать(4,4,"[ С~брос ]",дСброс,ВКЛ);
    черта2:=Черта.Создать(5,0,1,0);
    кнВыход:=Кнопка.Создать(6,4,"[ ~Выход ]",дВыход,ВКЛ);
                            (* добавляем наделы в порядке получения ввода *)
    Поле.ДобавитьНадел(поле,подложка);
    Поле.ДобавитьНадел(поле,зВремя);
    Поле.ДобавитьНадел(поле,черта1);
    Поле.ДобавитьНадел(поле,кнПуск);
    Поле.ДобавитьНадел(поле,кнСтоп);
    Поле.ДобавитьНадел(поле,кнСброс);
    Поле.ДобавитьНадел(поле,черта2);
    Поле.ДобавитьНадел(поле,кнВыход)
  КОН СоздатьПоле;

УКАЗ                                    (* задача ОбновитьПоказания *)
  Окно.Графическое("Секундомер","Lucida Console",30,ОбновитьПоказания);
(*
  Окно.Текстовое(ОбновитьПоказания);
 *)
  СоздатьПоле;
  Поле.ОкноНаВсёПоле(поле);
  Поле.Рисовать(поле);
  часы:=Окно.СоздатьЧасы(1,100); (* обновляем показания через 100мс *)
  Окно.Показать;
                        (* проверяем и обрабатываем ввод от человека *)
  ПОКА поле.состояние=Поле.сРабота ВЫП
    Поле.Проверить(поле)
  КОН;
  Окно.УдалитьЧасы(часы)
КОН Главная;

(******************************************************************************)
УКАЗ
  измеренноеВремя:=0;
  идётИзмерение:=ОТКЛ;
  Главная
КОН Секундомер. 




Вопросы, замечания и предложения высылайте на atimopheyev@yahoo.com или Издателю Глагола:
 email
 
Главная     ◄Глагол     ◄Азбука     ◄Задачи на Глаголе     Примеры приложений ►   Среда разработки ►   Отладка программ ►   Отличия от Оберона ►   Отличия от Паскаля ►   Ассемблер ARM ►   Глагол для ARM ►   ? и Ответы